<?php	
namespace app\pay\controller\yop;

use think\Controller;
use pay\yop\Config;

use pay\yop\lib\YopRequest;
use pay\yop\lib\YopClient3;
use customtool\Utils;

class Daifu extends Controller {
    private $cfg = null;
    
    public function _initialize() {
        $this->cfg = new Config();
    }
    
    /*
     * @params
     * $data    -> post参数
     * $resPayBis     -> model('PayBis')相关参数
     */
    public function index($resPayPlatform, $resPayDaifuApply) {
        $res = $this->reqYopData($resPayPlatform, $resPayDaifuApply);
        return $res;
    } 
    
    /*
     * 对数据进行解析，向平台发起请求
     */
    private function reqYopData($resPayPlatform, $resPayDaifuApply) {
        $amount = sprintf("%.2f", $resPayDaifuApply->amount / 100); // 实际出款金额
        $request = new YopRequest("OPR:" . $resPayPlatform->parent_merchant_id, $resPayPlatform->private_key, $this->cfg->C('yopUrl'), $resPayPlatform->public_key);
        $request->addParam("customerNumber",  $resPayPlatform->parent_merchant_id); // 商户编号
        $request->addParam("groupNumber",     $resPayPlatform->group_merchant_id); // 集团商户编号
        $request->addParam("batchNo",         $resPayDaifuApply->mchnt_batchid); // 出款批次
        $request->addParam("orderId",         $resPayDaifuApply->mchnt_orderid); // 出款订单号
        $request->addParam("amount",          $amount);  // 出款金额
        $request->addParam("product",         null); //  出款产品类，为空走委托结算出款
        $request->addParam("urgency",         1); // 是否加急，0：非加急   1：加急
        $request->addParam("accountName",     $resPayDaifuApply->account_name); // 收款银行帐户名称
        $request->addParam("accountNumber",   $resPayDaifuApply->account_number); // 收款银行账户卡号
        $request->addParam("bankCode",        $resPayDaifuApply->bank_code); // 收款银行编号
        $request->addParam("bankName",        null); // 收款银行全称
        $request->addParam("bankBranchName",  null); // 收款银行支行名称
        $request->addParam("provinceCode",    null); // 收款银行省编码
        $request->addParam("cityCode",        null); // 收款银行城市编码
        $request->addParam("feeType",         'SOURCE');  // 手续费方式，“SOURCE”商户承担; “TARGET”用户承担
        $request->addParam("desc",            null); // 描述
        $request->addParam("leaveWord",       null); // 留言
        $request->addParam("abstractInfo",    null); // 摘要
        $response = YopClient3::post($this->cfg->C('daifuUrl'), $request);
        if($response->validSign==1) { // 平台内部签名验证成功
            // 取得<易宝>返回结果
            $resData = Utils::objectToArray($response);
            // 根据返回结果更新 model('PayDaifuApply')表
            if( $resData['result'] == NULL) {
                return retMsgFalse($resData['error']);
            } else {
                return $this->yopRetHandle($resData['result'], $resPayDaifuApply);
            }
        } else { // 平台内部签名验证失败
            return paySignFalse();
        } 
    }
    
    private function yopRetHandle($resData, $resPayDaifuApply) {
        $errorCode = $resData['errorCode'];
        $statusCode = $resData['transferStatusCode'];
        
        if($errorCode == 'BAC001' && $statusCode == '0025') { // 已接收， 易宝已经接收了这笔打款，但未发至银行
            $resUpdate = PayDaifuApplyAgree($resPayDaifuApply->id, 1); // 更新model('PayDaifuApply')中的'is_agree'状态变更为1（已审核已通过）
            if($resUpdate) {
                // 畅远审核客户端代付申请后，向支付平台发起代付请求的返回
                return adminDaifuTrue($resPayDaifuApply);
            } else {
                return retMsgFalse('服务器异常');
            }
        } else {
            $resUpdate = PayDaifuApplyAgree($resPayDaifuApply->id, 2); // 更新model('PayDaifuApply')中的'is_agree'状态变更为2（已审核未通过）
            if($resUpdate) {
                return retMsgFalse($resData['errorMsg']);
            } else {
                return retMsgFalse('服务器异常');
            }
            
        }
    }

}